﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DataLayer.EF;
using EntityLayer;

namespace DataLayer.CLASES_Seguridad_DAO
{
    public class clsGrupoDAO
    {
        public Seguridad_GestionActivos_Entities DBSEGURIDAD = new Seguridad_GestionActivos_Entities();

        public List<T_Grupo> Listar()
        {
            try
            {
                var q = from c in DBSEGURIDAD.T_Grupo
                        select c;

                return q.ToList();

            }
            catch (Exception ex)
            {
                return new List<T_Grupo>();
            }
        }

        public bool Insertar(T_Grupo Obj)
        {
            try
            {
                DBSEGURIDAD.AddObject("T_Grupo", Obj);
                DBSEGURIDAD.SaveChanges();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        public bool Modificar(T_Grupo obj)
        {
            try
            {
                DBSEGURIDAD.AttachTo("T_Grupo", obj);
                DBSEGURIDAD.ObjectStateManager.ChangeObjectState(obj, System.Data.EntityState.Modified);
                DBSEGURIDAD.SaveChanges();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        public bool Eliminar(T_Grupo obj)
        {
            try
            {
                DBSEGURIDAD.AttachTo("T_Grupo", obj);
                DBSEGURIDAD.DeleteObject(obj);
                DBSEGURIDAD.SaveChanges();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        public List<T_Grupo> listarAccesosUsuarios()
        {
            List<T_Grupo> lista = new List<T_Grupo>();
            try
            {
                var q = from g in DBSEGURIDAD.T_Grupo
                        where g.IND_ESTADO == "A"
                        orderby g.DES_NOMBRE
                        select g;

                lista = q.ToList();
                return lista;
            }
            catch (Exception ex)
            {
                return new List<T_Grupo>();
            }
        }

        public List<T_Usuario_Grupo> listarUsuario_Grupo()
        {
            List<T_Usuario_Grupo> lista = new List<T_Usuario_Grupo>();
            try
            {
                var q = from g in DBSEGURIDAD.T_Usuario_Grupo
                        select g;

                lista = q.ToList();
                return lista;
            }
            catch (Exception ex)
            {
                return new List<T_Usuario_Grupo>();
            }
        }

        public bool Actualiza_EstadoGrupo(int idGrupo, string estado)
        {
            try
            {
                DBSEGURIDAD.ExecuteStoreCommand("UPDATE T_GRUPO set IND_ESTADO='" + estado + "' where ID_GRUPO=" + idGrupo);
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        public List<int> ObtenerOpcion_Grupo(int idGrupo)
        {
            List<int> lis = new List<int>();
            List<V_Grupo_Opcion> listaOpcion = new List<V_Grupo_Opcion>();
            try
            {
                var q = from c in DBSEGURIDAD.V_Grupo_Opcion
                        where c.ID_OPCION == idGrupo
                        select c;

                listaOpcion = q.ToList();

                foreach (V_Grupo_Opcion item in listaOpcion)
                {
                    lis.Add(item.ID_OPCION);
                }

                return lis;
            }
            catch (Exception ex)
            {
                return null;
            }
        }

        public T_Grupo ObtenerGrupoxId(int idGrupo)
        {
            List<T_Grupo> lis = new List<T_Grupo>();
            T_Grupo group = new T_Grupo();
            try
            {
                var q = from c in DBSEGURIDAD.T_Grupo
                        where c.ID_GRUPO == idGrupo
                        select c;

                lis = q.ToList();

                group = lis[0];
                return group;
            }
            catch (Exception ex)
            {
                return group;
            }
        }

        public List<T_Grupo> listarGrupo2()
        {
            List<T_Grupo> lista = new List<T_Grupo>();
            try
            {
                var q = from g in DBSEGURIDAD.T_Grupo
                        orderby g.DES_NOMBRE
                        select g;

                lista = q.ToList();
                return lista;
            }
            catch (Exception ex)
            {
                return new List<T_Grupo>();
            }
        }

        public bool EliminarGrupoopcion(int id_grupo)
        {
            try
            {
                DBSEGURIDAD.ExecuteStoreCommand("DELETE from t_grupo_opcion where id_grupo=" + id_grupo);
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        public bool InsertarGrupoOpcion(int GRUPO ,int OPCION)
        {
            try
            {
                //DBSEGURIDAD.AddObject("t_grupo_opcion", Obj);
                //DBSEGURIDAD.SaveChanges();
                DBSEGURIDAD.ExecuteStoreCommand("INSERT INTO t_grupo_opcion (ID_GRUPO, ID_OPCION)VALUES('" + GRUPO + "','" + OPCION + "')");
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }            
        }

        public int ObtenerIdGrupoMax()
        {
            int id_grupo = 0;

            try
            {
                var q = (from c in DBSEGURIDAD.T_Grupo.ToList()
                         select c.ID_GRUPO).DefaultIfEmpty(0).Max();

                id_grupo = q;
                return id_grupo + 1;
            }
            catch (Exception ex)
            {
                return 1;
            }
        }



    }
}
